#!/usr/bin/env python3
"""
Python3-specific versions of various functions used by stomp.py
"""

NULL = b"\x00"


def input_prompt(prompt):
  """
  Get user input

  :param str prompt: the prompt to display to the user

  :rtype: str
  """
  return input(prompt)


def decode(byte_data):
  """
  Decode the byte data to a string if not None.

  :param bytes byte_data: the data to decode

  :rtype: str
  """
  if byte_data is None:
    return None
  return byte_data.decode()


def encode(char_data):
  """
  Encode the parameter as a byte string.

  :param char_data: the data to encode

  :rtype: bytes
  """
  if type(char_data) is str:
    return char_data.encode()
  elif type(char_data) is bytes:
    return char_data
  else:
    raise TypeError("message should be a string or bytes")


def pack(pieces=()):
  """
  Join a sequence of strings together.

  :param list pieces: list of strings

  :rtype: bytes
  """
  encoded_pieces = (encode(piece) for piece in pieces)
  return b"".join(encoded_pieces)


def join(chars=()):
  """
  Join a sequence of characters into a string.

  :param bytes chars: list of chars

  :rtype: str
  """
  return b"".join(chars).decode()
